---
title: WebSocket详解
description: Feat Client
sidebar:
    order: 2
---
import CheckAuthorize from '../../../components/CheckAuthorize.astro'

<CheckAuthorize/>
随着 Web 技术的快速发展，WebSocket 已经成为实时通信应用的首选技术。它能够实现浏览器与服务器之间的全双工通信，适用于实时聊天、在线游戏、股票交易、物联设备控制等场景。

WebSocketClient 是 Feat 框架中的一款高性能 WebSocket 客户端实现，旨在为开发者提供灵活、高效、易用的 WebSocket 开发体验。

本文将详细介绍 Feat WebSocketClient 的功能、核心接口以及使用方法。

---

## 核心功能

Feat WebSocketClient 提供了以下核心功能：

1. **WebSocket 连接管理**：
- 支持 WebSocket 协议（ws:// 和 wss://）。
- 支持连接建立、断开、重连等生命周期管理。
- 提供连接状态监控和事件通知。

2. **消息传输**：
- 支持文本消息（String）和二进制消息（byte[]）的发送与接收。
- 支持消息的异步处理，避免阻塞主线程。

3. **事件监听**：
- 提供 `onOpen`（连接成功）、`onClose`（连接关闭）、`onError`（发生错误）、`onMessage`（接收消息）等事件回调，方便开发者处理各种场景。

4. **配置灵活**：
- 支持设置连接超时、读写缓冲区大小、代理配置等。
- 支持自定义 SSL/TLS 配置，满足安全通信需求。

---

## 核心接口

Feat WebSocketClient 的核心接口包括以下几个部分：

### WebSocketClient 类

`WebSocketClient` 是客户端的主要入口类，提供了以下核心方法：

- **构造方法**：
```java
public WebSocketClient(String url)
  ```
使用 WebSocket URL 初始化客户端实例，支持 `ws://` 和 `wss://` 协议。

- **配置方法**：
```java
public WebSocketOptions options()
  ```
获取配置对象，用于设置客户端的各项参数，如超时时间、读写缓冲区大小、代理等。

- **连接方法**：
```java
public void connect(WebSocketListener listener)
  ```
使用指定的监听器建立 WebSocket 连接。

- **发送消息**：
```java
public void sendMessage(String message) throws IOException
public void sendBinary(byte[] bytes) throws IOException
  ```
发送文本消息或二进制消息。

- **关闭连接**：
```java
public void close()
  ```
关闭 WebSocket 连接。

### WebSocketListener 接口

`WebSocketListener` 是事件监听接口，定义了以下方法：

- **onOpen**：
```java
void onOpen(WebSocketClient client, WebSocketResponse response)
  ```
连接成功时触发。

- **onClose**：
```java
void onClose(WebSocketClient client, WebSocketResponse response, CloseReason reason)
  ```
连接关闭时触发。

- **onError**：
```java
void onError(WebSocketClient client, WebSocketResponse response, Throwable throwable)
  ```
发生错误时触发。

- **onMessage**：
```java
void onMessage(WebSocketClient client, String message)
void onMessage(WebSocketClient client, byte[] message)
  ```
接收到文本消息或二进制消息时触发。

### WebSocketOptions 类

`WebSocketOptions` 提供了丰富的配置选项，包括：

- **设置连接超时**：
```java
public WebSocketOptions connectTimeout(int connectTimeout)
  ```

- **设置代理**：
```java
public WebSocketOptions proxy(String host, int port, String username, String password)
  ```

- **设置读写缓冲区大小**：
```java
public WebSocketOptions readBufferSize(int readBufferSize)
public WebSocketOptions writeBufferSize(int writeBufferSize)
  ```

- **启用调试模式**：
```java
public WebSocketOptions debug(boolean debug)
  ```

---

## 使用示例

### 基本用法

以下是一个简单的示例，展示了如何使用 Feat WebSocketClient 连接 WebSocket 服务器并处理消息：

```java
import tech.smartboot.feat.core.client.WebSocketClient;
import tech.smartboot.feat.core.client.WebSocketListener;
import tech.smartboot.feat.core.client.WebSocketResponse;

public class WebSocketDemo {
    public static void main(String[] args) {
        WebSocketClient client = new WebSocketClient("ws://localhost:8080/ws");
        client.options().debug(true); // 开启调试模式

        client.connect(new WebSocketListener() {
            @Override
            public void onOpen(WebSocketClient client, WebSocketResponse response) {
                System.out.println("WebSocket 连接成功");
                try {
                    client.sendMessage("Hello Feat WebSocket");
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            @Override
            public void onMessage(WebSocketClient client, String message) {
                System.out.println("接收到消息：" + message);
            }

            @Override
            public void onClose(WebSocketClient client, WebSocketResponse response, CloseReason reason) {
                System.out.println("WebSocket 连接关闭，关闭原因：" + reason);
            }

            @Override
            public void onError(WebSocketClient client, WebSocketResponse response, Throwable throwable) {
                System.out.println("发生错误：" + throwable.getMessage());
            }
        });
    }
}
```

### 高级配置

如果需要自定义连接参数，可以通过 `WebSocketOptions` 进行配置：

```java
WebSocketClient client = new WebSocketClient("wss://example.com/ws");
WebSocketOptions options = client.options();
options.connectTimeout(5000) // 设置连接超时时间为 5 秒
       .readBufferSize(8192) // 设置读缓冲区大小为 8 KB
       .proxy("proxy.example.com", 8080, "user", "password") // 设置代理服务器
       .debug(true); // 开启调试模式

client.connect(listener);
```

---

## 性能与扩展性

### 高性能

Feat WebSocketClient 基于 Feat 框架的高性能网络通信能力，能够支持大规模的并发连接和高频率的消息传输。通过合理配置读写缓冲区大小和线程池，可以进一步提升性能。

### 灵活性

Feat WebSocketClient 支持自定义 SSL/TLS 配置，适用于需要安全通信的场景。同时，通过 `WebSocketListener` 接口，开发者可以灵活地定义消息处理逻辑。

### 线程安全

Feat WebSocketClient 的设计充分考虑了线程安全问题，保证在高并发场景下的稳定性。

---

## 总结

Feat WebSocketClient 是一款功能丰富、性能优越的 WebSocket 客户端实现，能够满足大多数实时通信场景的需求。通过简单的 API 和灵活的配置选项，开发者可以快速构建高效的 WebSocket 应用。

如果你正在寻找一款高性能、易用的 WebSocket 客户端，Feat WebSocketClient 是一个值得考虑的选择。